/**
 * 汽车--赏车--图片
 http://photo.fblife.com/
 */

var cheerio = require("cheerio");//引用抓取html结构的node模块
var mkdirp  = require("mkdirp");  //引用创建文件夹的node模块
var iconv   = require("iconv-lite"); //引用字符集node模块
var commen  = require("../allocation/commen");//引用公共操作的自定义文件
var data    = require("../allocation/sql");  //引用数据库操作的自定义文件
var async   = require("async");  //引用同步执行

var url       = "http://photo.fblife.com/";
var chanel    = "shangchetupian";
var newsType  = 78;
var imgSite   = "";
var website   = "";
var newsLists = [];   //存放新闻列表
var logs=[];   //存放日志信息

//创建存放图片的文件夹及路径(20160901)
var imgPath               = commen.createDownFile().imgPath;

mkdirp.sync(imgPath);
logs.push({
    start_time:new Date().toLocaleString(),
    article_type_id:newsType,
    thread:chanel
});

//定义获取新闻列表
function getNewsList(url,callback)
{
    commen.load(url,function(err,body){
        if(err)
        {
            logs[0].location="列表请求";
            logs[0].message="错误："+err;
            logs[0].level=0;
            logs[0].end_time=new Date().toLocaleString();
            data.insertLog(logs[0],function(err,result){
                if(err) throw err;
                if(result>0)
                {
                    console.log("列表请求出错了！！！!");
                    process.exit(0);
                }
            });
            return err;
        }
        var  $  =cheerio.load(body.toString());
        var articleList = [];
        //获取新闻列表
        $(".b_zxtuwen h1 a ").each(function (index) {
            if(index==30)
            {
                return false;
            }
            if($(this).attr("href").indexOf(":")>0)
            {
                website="";
            }
            else
            {
                website="http://photo.fblife.com";
            }

            articleList.push(website+$(this).attr("href"));

        });
        console.log(articleList);
        callback(null, articleList);
    });
}

//定义获取新闻内容
function getNewsContent(url,callback)
{
    commen.load(url,function(err,body){
        if(err)
        {
            logs[0].location="内容请求";
            logs[0].message="错误："+err;
            logs[0].level=0;
            logs[0].end_time=new Date().toLocaleString();
            data.insertLog(logs[0],function(err,result){
                if(err) throw err;
                if(result>0)
                {
                    console.log("内容请求出错了！！！");
                    process.exit(0);
                }
            });
            return err;
        }
        var html = iconv.decode(body, 'gb2312');
        var $ = cheerio.load(html, {decodeEntities: false});
        var news        = [];
        var picUrls     = []; //存放图片的数组
        var allContent  = "";  //存放排版好的ubb格式的内容

        news.push({
            title: $(".p_tits").text().trim(),
            source:$(".photo_btm cite").text().trim(),
            author:$(".view_type").text().trim(),
            date:new Date().toLocaleString(),
            typeID:newsType,
            chanel:chanel,
            content:allContent,
            picUrls:picUrls
        });

        if($(".slider").html())
        {
            
            $(".slider").find("style").remove();
            $(".slider").find("script").remove();
            $(".slider").find("iframe").remove();
            $(".slider").find("br").remove();
            $("#last_photo").remove();
            $(".page.clearfix").remove();
            $(".prev_photo").remove();
            $("#next_photo").remove();
            if($(".slider").find("img").length>0)
            {
                for(var i=0;i<$(".slider").find("img").length;i++)
                {
                    if(i<8){
                        if($($(".slider").find("img")[i]).attr("src")==undefined)
                        {
                            $($(".slider").find("img")[i]).remove();
                            continue;
                        }
                        else
                        {
                            if($($(".slider").find("img")[i]).attr("src").indexOf(":")>0)
                            {
                                imgSite="";
                            }
                            else
                            {
                                imgSite="http://photo.fblife.com";
                            }
                            if($($(".slider").find("img")[i]).attr("src").indexOf("=")>0)
                            {
                                $($(".slider").find("img")[i]).remove();
                            }
                        
                            if($($(".slider").find("img")[i]).parent("p").html()==null)
                            {
                                $($(".slider").find("img")[i]).parent().replaceWith("<p>"+$($(".slider").find("img")[i]).parent().html()+"</p>");
                            }
                            
                            picUrls.push(imgSite+$($(".slider").find("img")[i]).attr("src"));
                             //改1  (下面注释部分全部删除即1-1至1-2)
                            
                        }
                    }
                    
                    
                }
            }


            //去除内容html中的空格和样式
            if($(".slider").html()==null)
            {
                logs[0].location="解析标签";
                logs[0].message="去除标签错误：Cannot read property 'replace' of null";
                logs[0].level=0;
                logs[0].end_time=new Date().toLocaleString();
                data.insertLog(logs[0],function(err,result){
                    if(err) throw err;
                    if(result>0)
                    {
                        console.log("去除标签出错了！！！");
                        process.exit(0);
                    }
                });
                return err;
            }
            else
            {
                $(".slider").html($(".slider").html().replace(/<!--[\w\W\r\n]*?-->/gmi,'').trim());
                //改2 （将下句代码移放到改5位置处，记得删除该句代码）
                
            }
             
             for (var i = 0; i <$(".slider").find("p").length; i++) 
             {

                    if($($(".slider").find("p")[i]).find("img")=="")
                    {
                        if($($(".slider").find("p")[i]).text()=="")
                       {
                          $($(".slider").find("p")[i]).remove();
                       }
                    }
             }
            for (var i = 0; i <$(".slider").find("p").length; i++) {

                if($($(".slider").find("p")[i]).find("img")=="")
                {

                         if($($(".slider").find("p")[i]).attr("align")=="center")
                         {

                          //说明属性align:center使得文字居中
                          $($(".slider").find("p")[i]).text("[text-align:center]"+$($(".slider").find("p")[i]).html());
                      
                         }
                         else
                         {

                             //说明无align属性，判断是否有style样式
                             if($($(".slider").find("p")[i]).attr("style")==undefined)
                             {
                                 // 说明无style
                                $($(".slider").find("p")[i]).text("[&emsp][&emsp]" + $($(".slider").find("p")[i]).html());
            
                             }
                             else
                             {
                                if($($(".slider").find("p")[i]).attr("style").indexOf("center")>0)
                                {
                                 //说明居中
                                  $($(".slider").find("p")[i]).text("[text-align:center]"+$($(".slider").find("p")[i]).html());
                      
                                }
                                else
                                {
                            
                                   //说明不居中
                                   $($(".slider").find("p")[i]).text("[&emsp][&emsp]" + $($(".slider").find("p")[i]).html());
                

                                }

                             }

                         }

                }
                else
                {
                    $($(".slider").find("p")[i]).find("img").parent("p").html("[text-align:center][img]"+imgSite+$($(".slider").find("p")[i]).find("img").attr("src")+"[/img]");
                
                }
                

            }

            //4-2


            

            //改5 （将改2处代码放至此处，即如下代码）
            $(".slider").html($(".slider").html().replace(/<([a-zA-Z1-6]+)(\s*[^>]*)?>/g, "<$1>"));
            $(".slider").find("li").remove();
            $(".slider").find("em").remove();
            $(".slider").find("i").remove();

    
            if($(".slider").html()==null)
            {
                logs[0].location="解析标签";
                logs[0].message="转换标签错误：Cannot read property 'replace' of null";
                logs[0].level=0;
                logs[0].end_time=new Date().toLocaleString();
                data.insertLog(logs[0],function(err,result){
                    if(err) throw err;
                    if(result>0)
                    {
                        console.log("转换标签出错了！！！");
                        process.exit(0);
                    }
                });
                return err;
            }
            else
            {
                //替换内容中所有的&nbsp;$gt等标签为ubb格式
                allContent =$(".slider").html().trim().replace(/(<\/?ul.*?>)|(<\/?cite.*?>)|(<\/?div.*?>)/g, '').replace(/>/g, "]").replace(/</g, "[").replace(/&rdquo;/g, "[&rdquo]").replace(/&ldquo;/g,"[&ldquo]").replace(/&nbsp;/g,"").replace(/&amp;/g,"[&amp]").replace(/&gt;/g,"[&gt]").replace(/&lt;/g,"[&lt]");
            
            }
            //将插入数据库的值存入数组news中
            news[0].content=allContent;
            news[0].picUrls=picUrls;
        }
        callback(null, news[0]);
    });
}

//调用方法，依次获取列表和内容，并存入数据库
async.series([
    // 获取新闻列表
    function (done) {
        getNewsList(url,function(err,list){
            newsLists = list;
            done(err);
        });
    },
    function (done) {
        async.eachSeries(newsLists, function (item, next) {
            getNewsContent(item, function (err,detail) {
                if (err) console.error(err.stack);
                data.insertData(detail,imgPath,function(err,result){
                    if(err)
                    {
                        logs[0].location="入库";
                        logs[0].message="错误："+err;
                        logs[0].level=0;
                        logs[0].end_time=new Date().toLocaleString();
                        data.insertLog(logs[0],function(err,result){
                            if(err) throw err;
                            if(result>0)
                            {
                                console.log("入库出错了！！！");
                                process.exit(0);
                            }
                        });
                        return err;
                    }
                    else if(result>0)
                    {
                        console.log("采集成功");
                    }
                });
                next();
            });
        }, done);
    }
],function (err) {
    if (err) console.error(err.stack);

    logs[0].location="无";
    logs[0].message="正确";
    logs[0].level=1;
    logs[0].end_time=new Date().toLocaleString();
    data.insertLog(logs[0],function(err,result){
        if(err) throw err;
        if(result>0)
        {
            console.log("写入日志成功!");
            process.exit(0);
        }
    });
});





























